package com.book.book.Controller;

import com.book.book.domain.BookInfo;
import com.book.book.service.BookInfoService;
import com.book.book.vo.Resultvo;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.beans.factory.annotation.Required; // 移除废弃注解
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/bookinfo")
public class BookinfoController {

    @Autowired
    BookInfoService bookInfoService;

    @Value("${upload.path}") // 确保你的 application.properties 或 application.yml 配置了 upload.path
    String uploadPath;

    @DeleteMapping("/{bookid}")
    public Resultvo del(@PathVariable Long bookid) {
        try {
            bookInfoService.del(bookid, uploadPath);
            return Resultvo.success("删除成功", null);
        } catch (Exception e) {
            e.printStackTrace(); // 打印堆栈信息，便于调试
            return Resultvo.error("删除失败：" + e.getMessage()); // 统一为您的方式
        }
    }

    @GetMapping("/validateBookname")
    public Resultvo validateBookname(@RequestParam(required = true) String bookname, @RequestParam(required = false) Long bookid) {
        try {
            Boolean flag = bookInfoService.validateBookname(bookname, bookid);
            return Resultvo.success("", flag);
        } catch (Exception e) {
            e.printStackTrace();
            return Resultvo.error("验证书名失败：" + e.getMessage()); // 统一为您的方式
        }
    }

    @PostMapping("/add")
    public Resultvo add(@RequestBody BookInfo bookInfo) {
        try {
            bookInfoService.saveOrUpdate(bookInfo);
            return Resultvo.success("操作成功", null);
        } catch (Exception e) {
            e.printStackTrace();
            return Resultvo.error("保存/更新图书失败：" + e.getMessage()); // 统一为您的方式
        }
    }

    @PostMapping("/upLogo/{bookid}")
    // 移除 throws IOException，统一在 try-catch 中处理返回 Resultvo.error
    public Resultvo upLogo(@PathVariable Long bookid, MultipartFile logo) {
        if (logo == null || logo.isEmpty()) {
            return Resultvo.error("文件必传"); // 统一为您的方式
        }

        String originalFilename = logo.getOriginalFilename();
        String suffix = "";
        if (originalFilename != null && originalFilename.contains(".")) {
            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        } else {
            return Resultvo.error("文件格式不正确，缺少扩展名"); // 统一为您的方式
        }

        if (logo.getSize() > 1024 * 1024) {
            return Resultvo.error("文件过大，请上传不要超过1M"); // 统一为您的方式
        } else if (
                !suffix.equalsIgnoreCase(".jpg") &&
                        !suffix.equalsIgnoreCase(".jpeg") &&
                        !suffix.equalsIgnoreCase(".gif") &&
                        !suffix.equalsIgnoreCase(".png")
        ) {
            return Resultvo.error("文件格式不对，必须是图片（jpg, jpeg, gif, png）"); // 统一为您的方式，提供更具体信息
        }

        File savePath = new File(uploadPath);
        if (!savePath.exists()) {
            savePath.mkdirs();
        }

        String newName = UUID.randomUUID().toString().replace("-", "");
        File saveFile = new File(uploadPath + newName + suffix);
        try {
            logo.transferTo(saveFile);
            // 文件上传成功，保存到数据库
            BookInfo bookInfo = bookInfoService.getById(bookid);
            if (bookInfo == null) {
                // 如果找不到图书，删除已上传的文件
                saveFile.delete(); // 删除已上传但无处关联的文件
                return Resultvo.error("未找到对应图书，无法更新图片"); // 统一为您的方式
            }
            // 删除旧图片：在更新新图片前，先删除旧图片以避免文件堆积
            if (bookInfo.getBookimg() != null && !bookInfo.getBookimg().isEmpty()) {
                File oldFile = new File(uploadPath + bookInfo.getBookimg());
                if (oldFile.exists()) {
                    oldFile.delete();
                }
            }
            bookInfo.setBookimg(newName + suffix);
            bookInfoService.saveOrUpdate(bookInfo);

            return Resultvo.success("上传logo成功", null);

        } catch (IOException e) {
            e.printStackTrace();
            return Resultvo.error("文件上传异常：" + e.getMessage()); // 统一为您的方式
        } catch (IllegalStateException e) {
            e.printStackTrace();
            return Resultvo.error("文件状态异常：" + e.getMessage()); // 统一为您的方式，更具体
        } catch (Exception e) { // 捕获其他未知异常
            e.printStackTrace();
            return Resultvo.error("更新图书图片失败：" + e.getMessage()); // 统一为您的方式
        }
    }


    @PostMapping("/page")
    public Resultvo page(@RequestBody BookInfo bookInfo, @RequestParam(defaultValue = "1") Integer pagenum) {
        // **pagenum 校验提前**
        if (pagenum == null || pagenum <= 0) { // 增加了 null 检查
            return Resultvo.error("当前页不能小于等于0"); // 统一为您的方式
        }

        try {
            //数据list
            PageInfo pageInfo = bookInfoService.getPage(bookInfo, pagenum);
            return Resultvo.success("", pageInfo);
        } catch (Exception e) {
            e.printStackTrace();
            return Resultvo.error("查询图书列表失败：" + e.getMessage()); // 统一为您的方式
        }
    }
}